package com.hk.commons.poi.excel.read.listeners;

import com.hk.commons.poi.excel.metadata.ErrorLog;
import com.hk.commons.poi.excel.metadata.Title;
import org.springframework.lang.Nullable;

import java.util.List;

/**
 * Sheet 解析监听器
 *
 * @param <T>
 * @author Kevin
 */
public interface ReadListener<T> {

    /**
     * 开始解析工作薄
     */
    default void onStart() {

    }

    /**
     * 一个sheet开始时调用
     *
     * @param sheetIndex 当前sheetIndex，从0开始
     * @param sheetName  当前sheetName
     * @param totalRow   当前sheet要读取的最大行
     */
    default void onSheetStart(int sheetIndex, String sheetName, int totalRow) {

    }

    /**
     * 读取到某个sheet 的行开始
     *
     * @param sheetIndex 当前sheetIndex，从0开始
     * @param sheetName  当前sheetName
     * @param row        当前sheet的行
     */
    default void onRowStart(int sheetIndex, String sheetName, int row) {

    }

    /**
     * 读取到某个sheet 的行结束
     *
     * @param sheetIndex 当前sheetIndex，从0开始
     * @param sheetName  当前sheetName
     * @param row        当前sheet的行
     * @param data       读取后的数据,当读取一行数据解析失败时，该值会为 null
     */
    default void onRowEnd(int sheetIndex, String sheetName, int row, T data, List<Title> titleList) {

    }

    /**
     * 读取某个sheet结束
     *
     * @param sheetIndex 当前sheetIndex，从0开始
     * @param sheetName  当前sheetName
     */
    default void onSheetEnd(int sheetIndex, String sheetName) {

    }

    /**
     * 工作薄解析完成
     */
    @Nullable
    default List<ErrorLog<T>> onCompleted() {
        return null;
    }
}
